<?php 

class Event_ForeignCouponPostSave extends Crud_Event_Handler
{
	protected $_type = 'postSave';

	public function run($row)
	{
		$this->_addAttProduct ($row);
		$this->_addAttTicket ($row);
		$this->_addCodesFromCsv ($row);
	}

	protected function _addAttProduct ($row){
		$atts = $this->_getParam('att_product', array());
		foreach ($atts as $att) {
			if (!$att) continue;
			$att = explode ("::" , $att);

			$peer = ProductPeer::getInstance();
			$select = $peer->select();
			$select->where(ProductPeer::INTERNAL_ID, $att[1]);
			$rowset = $peer->fetchAll($select);
			if ($rowset->count() >= 2) {
				throw new Crud_Exception("Невозможно добавить сопуствущий товар: `$att`. Товар с таким именем несколько, пожалуйста, уточните запрос");
			}
			$alikeRow = $rowset->current();
			if (!$alikeRow) {
				throw new Crud_Exception("Невозможно добавить сопутствуюий товар: `$att`. Товар с таким именем не найден");
			}

			$select = ForeignCoupon2productPeer::getInstance()->select();
				$select->where('product_id = ?', $alikeRow->getId());
				$select->where('coupon_id = ?', $row->getId());
			$m2mRow = ForeignCoupon2productPeer::getInstance()->fetchRow($select);
			if ($m2mRow) {
				throw new Crud_Exception("Невозможно добавить сопутствующий товар: `$att`. Наименование уже есть в списке");
			}

			$nRow = ForeignCoupon2productPeer::getInstance()->createRow();
				$nRow->setCouponId($row->getId());
				$nRow->setProductId($alikeRow->getId());
			$nRow->save();
		}
	}

	protected function _addAttTicket ($row){
		$atts = $this->_getParam('att_ticket', array());
		foreach ($atts as $att) {
			if (!$att) continue;

			$peer = ForeignCouponCodePeer::getInstance();
			$select = $peer->select();
			$select->where(ForeignCouponCodePeer::CODE, $att);
			$select->where(ForeignCouponCodePeer::COUPON_ID, $row->getId());
			$rowset = $peer->fetchAll($select);
			if ($rowset->count() > 0) {
				throw new Crud_Exception("Невозможно добавить номер купона: `$att`. Такой номер для данного купона уже существует");
			}

			$nRow = $peer->createRow();
				$nRow->setCode($att);
				$nRow->setCouponId($row->getId());
			$nRow->save();
		}
	}

	protected function _addCodesFromCsv($row) {
		if ($_FILES['code_list']['name'] != '') {
			if (strpos($_FILES['code_list']['name'] , '.csv') == false)
				throw new Crud_Exception("Некорректный тип файла купонов, необходим *.csv ");
			$csv = file($_FILES['code_list']['tmp_name']);
			$peer = ForeignCouponCodePeer::getInstance();
			foreach ($csv as $stroka) {
				$stroka = trim($stroka);
				if ($stroka != '') {
					$select = $peer->select()->where('code = ?' , $stroka);
					$code = $peer->fetchRow($select);
					if ($code != '')
						throw new Crud_Exception("Повтор вводимого кода ".$code->getCode());
					$nRow = $peer->createRow();
						$nRow->setCode($stroka);
						$nRow->setCouponId($row->getId());
					$nRow->save();
				}
			}
		}
	}
}